import AsyncStorage from '@react-native-async-storage/async-storage';

export const local = {

    /**
     * 设置缓存
     * @params key  必传 唯一标识
     * @params data  数据  type：string || object
     * */
    async set(key: string, data) {
        if (!key) {
            return;
        }
        const setValue = JSON.stringify(data);
        await AsyncStorage.setItem(key, setValue);
    },

    /**
     * 根据key获取数据
     * @params key 必传
     * */
    async get(key: string) {
        if (!key) {
            return null;
        }
        const jsonValue = await AsyncStorage.getItem(key)
        return jsonValue != null ? JSON.parse(jsonValue) : null;
    },

    /**
     * 设置缓存
     * @params key  必传 唯一标识
     * @params data  数据  type：string || object
     * */
    async merge(key: string, data) {
        if (!key) {
            return;
        }
        if (typeof data !== 'object' || !data ){
            throw new Error('数据不为JSON格式，无法merge!');
        }
        let srcData = await this.get(key);
        if (typeof srcData !== 'object' || !srcData ){
            throw new Error('原数据不为JSON格式，无法merge!');
        }
        await AsyncStorage.mergeItem(key, JSON.stringify(data))
    },

    /**
     * 根据key删除数据
     * @params key 必传
     * */
    async remove(key: string) {
        if (!key) {
            return;
        }
        await AsyncStorage.removeItem(key);
    },

    /**
     * 获取所有数据
     * */
    async getAllKeys() {
        return await AsyncStorage.getAllKeys();
    },

    /**
     * 清除所有数据
     * */
    async clear() {
        await AsyncStorage.clear();
    },

};

